package com.ctshk.rpc.season.service;


import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.season.dto.FixedSeasonDetailsDTO;
import com.ctshk.rpc.season.dto.FixedSeasonProductPageDTO;
import com.ctshk.rpc.season.dto.StrategyInfoDateDTO;
import com.ctshk.rpc.season.req.AppSearchFixedProductReq;
import com.ctshk.rpc.season.req.SearchFixedProductReq;
import com.ctshk.rpc.season.req.SeasonFixedSetReq;
import com.ctshk.rpc.season.req.SeasonProductStrategyQueryByDateReq;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 * 套票-固定套票单项产品打包表 服务类
 * </p>
 *
 * @author 杨林
 * @since 2021-03-09
 */
public interface ISeasonFixedProductPackageService {

    /* @MethodName: 产品设置
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/9 11:37
     **/
    Result setFixedSeasonProduct(TokenUser user, SeasonFixedSetReq seasonFixedSetReq);


    /**
     * 根据固定套票id 和打包实体 获取产品设置信息
     *
     * @param fixedSeasonProductInfoDTO
     * @return
     */
    void getProductSetInfo(FixedSeasonDetailsDTO fixedSeasonProductInfoDTO);

    /* @MethodName: 批量处理 套票 相关产品信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/12 16:14
     **/
    void batchUpdateProductInfo(TokenUser user, SeasonFixedSetReq req, boolean flag, Long packageId);


    /* @MethodName: 获取固定套票 打包产品具体的信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/22 10:00
     **/
    void getPackageProduct(FixedSeasonDetailsDTO dto, LocalDate startDate, Integer travelDays, Integer travelNights, Integer channelType,Long channelId);
    /* @MethodName: 获取固定套票 默认打包产品具体的信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/22 10:00
     **/
    BigDecimal getPackageDefaultProduct(FixedSeasonDetailsDTO dto, LocalDate startDate, Integer travelDays, Integer travelNights, Integer channelType,Long userId);

    /* @MethodName: 预订中心 搜索列表
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/18 9:24
     **/
    PageResponse<FixedSeasonProductPageDTO> searchReserveCenterSeasonFixed(SearchFixedProductReq req, TokenUser user);


    /* @MethodName: 获取固定套票详情
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/20 14:51
     **/
    Result getFixedSeasonProductDetails(Long productId, Long userId, Integer channelType,Long channelId);


    /* @MethodName: 获取固定套票详情
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/20 14:51
     **/
    Result getAppFixedSeasonProductDetails(AppSearchFixedProductReq req, Long userId);

    Result getChangeAppFixedSeasonProductDetails(AppSearchFixedProductReq req, Long userId,Long channelId);



    /* @MethodName:根据用户id  出发日期  结束日期 获取该 时间段内是否有 加幅信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/23 15:02
     **/
    List<StrategyInfoDateDTO> getOptionalCalendar(SeasonProductStrategyQueryByDateReq req, TokenUser user, Integer channelType);


    BigDecimal getFixedSeasonProductCosts(FixedSeasonDetailsDTO fixedSeasonDetailsDTO);

    BigDecimal getFixedSeasonAdjust(BigDecimal cost, Long useId, LocalDate date, Long productId, Integer channelType);
}
